#include<bits/stdc++.h>
#define int long long
#define M 998244353
using namespace std;
int n,K,a[1000005],ans,dp[11][1000005][2],dp2[11][1000005];
vector<vector<int>> e;
vector<int> E;
inline int read(){
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-') f=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9'){
        x=(x<<1)+(x<<3)+(ch^48);
        ch=getchar();
    }
    return x*f;
}
inline void add(int &x,int y){
    if((x+y)>=M) x=x+y-M;
    else x+=y;
}
inline void del(int &x,int y){
    if((x-y)<0) x=x-y+M;
    else x-=y;
}
inline void dfs(int k,int g){
    if(!E.empty()) e.push_back(E);
    if(k==(n+1)) return;
    for(int i=g;i<K;i++){
        E.push_back(i);
        dfs(k+1,i);
        E.pop_back();
    }
}
signed main(){
    freopen("count.in","r",stdin);
    freopen("count.out","w",stdout);
    n=read(),K=read();
    for(int i=1;i<=n;i++) a[i]=read();
    if(n<=10&&K<=10){
        dfs(1,1);
        for(int i=0;i<(int)e.size();i++){
            if((int)e[i].size()<n) ans++;
            else{
                bool f=1;
                for(int j=1;j<=n;j++){
                    if(e[i][j-1]>a[j]){
                        f=0;
                        break;
                    }
                    else if(e[i][j-1]<a[j]) break;
                }
                if(f) ans++;
            }
        }
        cout<<ans%M;
    }
    else if(n<=10){
        add(dp[1][1][0],1);
        del(dp[1][a[1]][0],1);
        add(dp[1][a[1]][1],1);
        del(dp[1][a[1]+1][1],1);
        for(int i=1;i<=n;i++){
            for(int j=1;j<K;j++){
                add(dp[i][j][0],dp[i][j-1][0]),add(dp[i][j][1],dp[i][j-1][1]);
                // cerr<<i<<" "<<j<<" "<<a[i+1]<<" "<<dp[i][j][0]<<" "<<dp[i][j][1]<<"\n";
                add(dp[i+1][j][0],dp[i][j][0]);
                del(dp[i+1][K][0],dp[i][j][0]);
                if(j<a[i+1]){
                    add(dp[i+1][j][0],dp[i][j][1]);
                    del(dp[i+1][a[i+1]][0],dp[i][j][1]);
                }
                if(j<=a[i+1]){
                    add(dp[i+1][a[i+1]][1],dp[i][j][1]);
                    del(dp[i+1][a[i+1]+1][1],dp[i][j][1]);
                }
            }
        }
        for(int j=0;j<K;j++){
            add(ans,dp[n][j][0]);
            add(ans,dp[n][j][1]);
        }
        add(dp2[1][1],1);
        del(dp2[1][K],1);
        for(int i=1;i<n;i++){
            for(int j=1;j<K;j++){
                add(dp2[i][j],dp2[i][j-1]);
                add(dp2[i+1][j],dp2[i][j]);
                del(dp2[i+1][K],dp2[i][j]);
            }
        }
        for(int i=1;i<n;i++) for(int j=1;j<K;j++) add(ans,dp2[i][j]);
        cout<<ans;
    }
    return 0;
}